<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            二分排序
                1. 先得到数组的中间值
                2. 依次用中间值和每个元素比较
                3. 如果小于中间值，放入左边，否则放入右边
                4. 重复上面的步骤，直到实现排序
        */

        let arr = [1,8,7,2,11,23,4]

        // 定义一个函数 ， 数组是参数
        function quickSort(arr) {
            if (arr.length == 0) {
                return [];    // 返回空数组
            }

            // 取出中间的索引
            var cIndex = Math.floor(arr.length / 2);
            // 把中间值从 数组里面拿出来
            var c = arr.splice(cIndex, 1);
            // 用来放小于中间值的左边部分
            var l = [];
            // 用来放大于中间值的右边部分
            var r = [];
            // 遍历数组
            for (var i = 0; i < arr.length; i++) {
                // 小于中间值的放到左边
                if (arr[i] < c) {
                    l.push(arr[i]);
                } else {
                    // 大于中间值的放到右边
                    r.push(arr[i]);
                }
            }
            // 左边和右边继续二分排序
            return quickSort(l).concat(c, quickSort(r));
        }

        console.log(quickSort(arr));
    </script>
</body>

</html>